//
0x60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600881526020017f464c4f57434841540000000000000000000000000000000000000000000000008152506002908162000098919062000466565b506040518060400160405280600881526020017f466c6f774368617400000000000000000000000000000000000000000000000081525060039081620000df919062000466565b506012600460006101000a81548160ff021916908360ff1602179055506a52b7d2dcc80cd2e40000006005819055506005546006600073de600f60e2b54f5b5fe4b08554301ec626baa1c273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073de600f60e2b54f5b5fe4b08554301ec626baa1c273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620001de91906200055e565b60405180910390a36200057b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026e57607f821691505b60208210810362000284576200028362000226565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002af565b620002fa8683620002af565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000347620003416200033b8462000312565b6200031c565b62000312565b9050919050565b6000819050919050565b620003638362000326565b6200037b62000372826200034e565b848454620002bc565b825550505050565b600090565b6200039262000383565b6200039f81848462000358565b505050565b5b81811015620003c757620003bb60008262000388565b600181019050620003a5565b5050565b601f8211156200041657620003e0816200028a565b620003eb846200029f565b81016020851015620003fb578190505b620004136200040a856200029f565b830182620003a4565b50505b505050565b600082821c905092915050565b60006200043b600019846008026200041b565b1980831691505092915050565b600062000456838362000428565b9150826002028217905092915050565b6200047182620001ec565b67ffffffffffffffff8111156200048d576200048c620001f7565b5b62000499825462000255565b620004a6828285620003cb565b600060209050601f831160018114620004de5760008415620004c9578287015190505b620004d5858262000448565b86555062000545565b601f198416620004ee866200028a565b60005b828110156200051857848901518255600182019150602085019450602081019050620004f1565b8683101562000538578489015162000534601f89168262000428565b8355505b6001600288020188555050505b505050505050565b620005588162000312565b82525050565b60006020820190506200057560008301846200054d565b92915050565b611915806200058b6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a293d1e8116100ad578063d4ee1d9011610071578063d4ee1d901461036f578063dc39d06d1461038d578063dd62ed3e146103bd578063e6cb9013146103ed578063f2fde38b1461041d5761012c565b8063a293d1e81461027f578063a9059cbb146102af578063b5931f7c146102df578063cae9ca511461030f578063d05c78da1461033f5761012c565b80633eaaf86b116100f45780633eaaf86b146101eb57806370a082311461020957806379ba5097146102395780638da5cb5b1461024357806395d89b41146102615761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b610139610439565b60405161014691906111b4565b60405180910390f35b6101696004803603810190610164919061127e565b6104c7565b60405161017691906112d9565b60405180910390f35b6101876105b9565b6040516101949190611303565b60405180910390f35b6101b760048036038101906101b2919061131e565b61060d565b6040516101c491906112d9565b60405180910390f35b6101d561089d565b6040516101e2919061138d565b60405180910390f35b6101f36108b0565b6040516102009190611303565b60405180910390f35b610223600480360381019061021e91906113a8565b6108b6565b6040516102309190611303565b60405180910390f35b6102416108ff565b005b61024b610a9b565b60405161025891906113e4565b60405180910390f35b610269610abf565b60405161027691906111b4565b60405180910390f35b610299600480360381019061029491906113ff565b610b4d565b6040516102a69190611303565b60405180910390f35b6102c960048036038101906102c4919061127e565b610b70565b6040516102d691906112d9565b60405180910390f35b6102f960048036038101906102f491906113ff565b610cf9565b6040516103069190611303565b60405180910390f35b61032960048036038101906103249190611574565b610d1b565b60405161033691906112d9565b60405180910390f35b610359600480360381019061035491906113ff565b610e7f565b6040516103669190611303565b60405180910390f35b610377610eb7565b60405161038491906113e4565b60405180910390f35b6103a760048036038101906103a2919061127e565b610edd565b6040516103b491906112d9565b60405180910390f35b6103d760048036038101906103d291906115e3565b610fde565b6040516103e49190611303565b60405180910390f35b610407600480360381019061040291906113ff565b611065565b6040516104149190611303565b60405180910390f35b610437600480360381019061043291906113a8565b611088565b005b6003805461044690611652565b80601f016020809104026020016040519081016040528092919081815260200182805461047290611652565b80156104bf5780601f10610494576101008083540402835291602001916104bf565b820191906000526020600020905b8154815290600101906020018083116104a257829003601f168201915b505050505081565b600081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105a79190611303565b60405180910390a36001905092915050565b6000600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460055461060891906116b2565b905090565b6000610658600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610b4d565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610721600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610b4d565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506107ea600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611065565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161088a9190611303565b60405180910390a3600190509392505050565b600460009054906101000a900460ff1681565b60055481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095957600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054610acc90611652565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890611652565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b505050505081565b600082821115610b5c57600080fd5b8183610b6891906116b2565b905092915050565b6000610bbb600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610b4d565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c47600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611065565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ce79190611303565b60405180910390a36001905092915050565b6000808211610d0757600080fd5b8183610d139190611715565b905092915050565b600082600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dfb9190611303565b60405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401610e42949392919061179b565b600060405180830381600087803b158015610e5c57600080fd5b505af1158015610e70573d6000803e3d6000fd5b50505050600190509392505050565b60008183610e8d91906117e7565b90506000831480610ea85750818382610ea69190611715565b145b610eb157600080fd5b92915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610f93929190611829565b6020604051808303816000875af1158015610fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd6919061187e565b905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000818361107391906118ab565b90508281101561108257600080fd5b92915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561115e578082015181840152602081019050611143565b60008484015250505050565b6000601f19601f8301169050919050565b600061118682611124565b611190818561112f565b93506111a0818560208601611140565b6111a98161116a565b840191505092915050565b600060208201905081810360008301526111ce818461117b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611215826111ea565b9050919050565b6112258161120a565b811461123057600080fd5b50565b6000813590506112428161121c565b92915050565b6000819050919050565b61125b81611248565b811461126657600080fd5b50565b60008135905061127881611252565b92915050565b60008060408385031215611295576112946111e0565b5b60006112a385828601611233565b92505060206112b485828601611269565b9150509250929050565b60008115159050919050565b6112d3816112be565b82525050565b60006020820190506112ee60008301846112ca565b92915050565b6112fd81611248565b82525050565b600060208201905061131860008301846112f4565b92915050565b600080600060608486031215611337576113366111e0565b5b600061134586828701611233565b935050602061135686828701611233565b925050604061136786828701611269565b9150509250925092565b600060ff82169050919050565b61138781611371565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000602082840312156113be576113bd6111e0565b5b60006113cc84828501611233565b91505092915050565b6113de8161120a565b82525050565b60006020820190506113f960008301846113d5565b92915050565b60008060408385031215611416576114156111e0565b5b600061142485828601611269565b925050602061143585828601611269565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6114818261116a565b810181811067ffffffffffffffff821117156114a05761149f611449565b5b80604052505050565b60006114b36111d6565b90506114bf8282611478565b919050565b600067ffffffffffffffff8211156114df576114de611449565b5b6114e88261116a565b9050602081019050919050565b82818337600083830152505050565b6000611517611512846114c4565b6114a9565b90508281526020810184848401111561153357611532611444565b5b61153e8482856114f5565b509392505050565b600082601f83011261155b5761155a61143f565b5b813561156b848260208601611504565b91505092915050565b60008060006060848603121561158d5761158c6111e0565b5b600061159b86828701611233565b93505060206115ac86828701611269565b925050604084013567ffffffffffffffff8111156115cd576115cc6111e5565b5b6115d986828701611546565b9150509250925092565b600080604083850312156115fa576115f96111e0565b5b600061160885828601611233565b925050602061161985828601611233565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061166a57607f821691505b60208210810361167d5761167c611623565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116bd82611248565b91506116c883611248565b92508282039050818111156116e0576116df611683565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061172082611248565b915061172b83611248565b92508261173b5761173a6116e6565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b600061176d82611746565b6117778185611751565b9350611787818560208601611140565b6117908161116a565b840191505092915050565b60006080820190506117b060008301876113d5565b6117bd60208301866112f4565b6117ca60408301856113d5565b81810360608301526117dc8184611762565b905095945050505050565b60006117f282611248565b91506117fd83611248565b925082820261180b81611248565b9150828204841483151761182257611821611683565b5b5092915050565b600060408201905061183e60008301856113d5565b61184b60208301846112f4565b9392505050565b61185b816112be565b811461186657600080fd5b50565b60008151905061187881611852565b92915050565b600060208284031215611894576118936111e0565b5b60006118a284828501611869565b91505092915050565b60006118b682611248565b91506118c183611248565b92508282019050808211156118d9576118d8611683565b5b9291505056fea26469706673582212203ed94c933b952de4bb599bdd5b16414fa005d7ffb30380a272ebceef6a304bdd64736f6c63430008120033