0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f746f6b656e206e616d65000000000000000000000000000000000000000000008152506002908162000058919062000460565b506012600360006101000a81548160ff021916908360ff1602179055506040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525060049081620000bb919062000460565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900460ff16600a6200011b9190620006d7565b620186a06200012b919062000728565b6006819055506006546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620001d8919062000784565b60405180910390a3620007a1565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005d557808604811115620005ad57620005ac62000547565b5b6001851615620005bd5780820291505b8081029050620005cd8562000576565b94506200058d565b94509492505050565b600082620005f05760019050620006c3565b81620006005760009050620006c3565b816001811462000619576002811462000624576200065a565b6001915050620006c3565b60ff84111562000639576200063862000547565b5b8360020a91508482111562000653576200065262000547565b5b50620006c3565b5060208310610133831016604e8410600b8410161715620006945782820a9050838111156200068e576200068d62000547565b5b620006c3565b620006a3848484600162000583565b92509050818404811115620006bd57620006bc62000547565b5b81810290505b9392505050565b600060ff82169050919050565b6000620006e4826200030c565b9150620006f183620006ca565b9250620007207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005de565b905092915050565b600062000735826200030c565b915062000742836200030c565b925082820262000752816200030c565b915082820484148315176200076c576200076b62000547565b5b5092915050565b6200077e816200030c565b82525050565b60006020820190506200079b600083018462000773565b92915050565b611a7980620007b16000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a082311161009757806395d89b411161006657806395d89b41146102c2578063a9059cbb146102e0578063c204642c14610310578063dd62ed3e1461032c576100f5565b806370a082311461021457806379cc6790146102445780638863dd1a146102745780638da5cb5b146102a4576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806340c10f19146101b457806342966c68146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b61010261035c565b60405161010f919061127d565b60405180910390f35b610132600480360381019061012d9190611347565b6103ee565b60405161013f91906113a2565b60405180910390f35b61015061054e565b60405161015d91906113cc565b60405180910390f35b610180600480360381019061017b91906113e7565b610558565b60405161018d91906113a2565b60405180910390f35b61019e61090d565b6040516101ab9190611456565b60405180910390f35b6101ce60048036038101906101c99190611347565b610924565b6040516101db91906113a2565b60405180910390f35b6101fe60048036038101906101f99190611471565b610a94565b60405161020b91906113a2565b60405180910390f35b61022e6004803603810190610229919061149e565b610b73565b60405161023b91906113cc565b60405180910390f35b61025e60048036038101906102599190611347565b610bbb565b60405161026b91906113a2565b60405180910390f35b61028e6004803603810190610289919061149e565b610d2b565b60405161029b91906113a2565b60405180910390f35b6102ac610e07565b6040516102b991906114da565b60405180910390f35b6102ca610e31565b6040516102d7919061127d565b60405180910390f35b6102fa60048036038101906102f59190611347565b610ec3565b60405161030791906113a2565b60405180910390f35b61032a6004803603810190610325919061163d565b6110cd565b005b61034660048036038101906103419190611699565b611166565b60405161035391906113cc565b60405180910390f35b60606002805461036b90611708565b80601f016020809104026020016040519081016040528092919081815260200182805461039790611708565b80156103e45780601f106103b9576101008083540402835291602001916103e4565b820191906000526020600020905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361045e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045590611785565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161053c91906113cc565b60405180910390a36001905092915050565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bf906117f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f90611883565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156107275750828110155b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90611915565b60405180910390fd5b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107b49190611964565b92505081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108099190611998565b92505081905550828161081c9190611998565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108f991906113cc565b60405180910390a360019150509392505050565b6000600360009054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90611883565b60405180910390fd5b81600660008282546109c89190611998565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a1d9190611998565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a8291906113cc565b60405180910390a36001905092915050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae49190611964565b925050819055508160066000828254610afd9190611964565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b6291906113cc565b60405180910390a360019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490611883565b60405180910390fd5b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c9b9190611964565b925050819055508160066000828254610cb49190611964565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d1991906113cc565b60405180910390a36001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490611883565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e4090611708565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c90611708565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a906117f1565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90611915565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110029190611964565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110579190611998565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110bb91906113cc565b60405180910390a36001905092915050565b60005b82518110156111615760008382815181106110ee576110ed6119cc565b5b60200260200101519050826000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111469190611998565b92505081905550508080611159906119fb565b9150506110d0565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561122757808201518184015260208101905061120c565b60008484015250505050565b6000601f19601f8301169050919050565b600061124f826111ed565b61125981856111f8565b9350611269818560208601611209565b61127281611233565b840191505092915050565b600060208201905081810360008301526112978184611244565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112de826112b3565b9050919050565b6112ee816112d3565b81146112f957600080fd5b50565b60008135905061130b816112e5565b92915050565b6000819050919050565b61132481611311565b811461132f57600080fd5b50565b6000813590506113418161131b565b92915050565b6000806040838503121561135e5761135d6112a9565b5b600061136c858286016112fc565b925050602061137d85828601611332565b9150509250929050565b60008115159050919050565b61139c81611387565b82525050565b60006020820190506113b76000830184611393565b92915050565b6113c681611311565b82525050565b60006020820190506113e160008301846113bd565b92915050565b600080600060608486031215611400576113ff6112a9565b5b600061140e868287016112fc565b935050602061141f868287016112fc565b925050604061143086828701611332565b9150509250925092565b600060ff82169050919050565b6114508161143a565b82525050565b600060208201905061146b6000830184611447565b92915050565b600060208284031215611487576114866112a9565b5b600061149584828501611332565b91505092915050565b6000602082840312156114b4576114b36112a9565b5b60006114c2848285016112fc565b91505092915050565b6114d4816112d3565b82525050565b60006020820190506114ef60008301846114cb565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61153282611233565b810181811067ffffffffffffffff82111715611551576115506114fa565b5b80604052505050565b600061156461129f565b90506115708282611529565b919050565b600067ffffffffffffffff8211156115905761158f6114fa565b5b602082029050602081019050919050565b600080fd5b60006115b96115b484611575565b61155a565b905080838252602082019050602084028301858111156115dc576115db6115a1565b5b835b8181101561160557806115f188826112fc565b8452602084019350506020810190506115de565b5050509392505050565b600082601f830112611624576116236114f5565b5b81356116348482602086016115a6565b91505092915050565b60008060408385031215611654576116536112a9565b5b600083013567ffffffffffffffff811115611672576116716112ae565b5b61167e8582860161160f565b925050602061168f85828601611332565b9150509250929050565b600080604083850312156116b0576116af6112a9565b5b60006116be858286016112fc565b92505060206116cf858286016112fc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061172057607f821691505b602082108103611733576117326116d9565b5b50919050565b7f45524332303a20417070726f766520746f207a65726f20616464726573730000600082015250565b600061176f601e836111f8565b915061177a82611739565b602082019050919050565b6000602082019050818103600083015261179e81611762565b9050919050565b7f45524332303a205472616e7366657220746f207a65726f206164647265737300600082015250565b60006117db601f836111f8565b91506117e6826117a5565b602082019050919050565b6000602082019050818103600083015261180a816117ce565b9050919050565b7f596f7520617265206e6f74206f776e6572206f66207468697320636f6e74726160008201527f6374210000000000000000000000000000000000000000000000000000000000602082015250565b600061186d6023836111f8565b915061187882611811565b604082019050919050565b6000602082019050818103600083015261189c81611860565b9050919050565b7f546f6b656e2062616c616e6365206973206c6f776572207468616e207468652060008201527f76616c7565207265717565737465642e00000000000000000000000000000000602082015250565b60006118ff6030836111f8565b915061190a826118a3565b604082019050919050565b6000602082019050818103600083015261192e816118f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061196f82611311565b915061197a83611311565b925082820390508181111561199257611991611935565b5b92915050565b60006119a382611311565b91506119ae83611311565b92508282019050808211156119c6576119c5611935565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611a0682611311565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a3857611a37611935565b5b60018201905091905056fea26469706673582212206456344ec170ad801e84c1eeb743a524249a53290af9116d4d92b2c9af5d0aeb64736f6c63430008120033